package com.siss.tenancy.user.utils;

import com.siss.tenancy.exception.IllegalParameterException;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.List;

/**
 * 分页Utils
 * 
 * @author yingw
 * @version 1.0
 */
public class PageUtils {

	// 升序
	private static final String ASC = " asc";
	// 降序
	private static final String DESC = " desc";
	
	/**
	 * Controller接收分页数据进行合法校验, 并返回排序  如(id desc)
	 * 
	 * @param pageNum						页码
	 * @param pageSize						页长
	 * @param order							排序规则    如:按id升序(id) , 按id降序(-id)
	 * @param orderAllows					允许的排序数组
	 * @return								排序
	 * @throws IllegalParameterException	参数异常
	 */
	public static String getOrdersAndValid(Integer pageNum, Integer pageSize, String order, String[] orderAllows) throws IllegalParameterException{
		
		if(pageNum == null || pageNum < 0){
			throw new IllegalParameterException("页码 参数不合法");
		}
		
		if(pageSize == null || pageSize < 0 || pageSize > 200){
			throw new IllegalParameterException("页长 参数不合法");
		}
		
		if(StringUtils.isNotEmpty(order)){
			if(order.indexOf("-") == 0){
				// 降序
				if(orderAllows != null){
					List<String> list = Arrays.asList(orderAllows);
					if(!list.contains(order.substring(1))){
						throw new IllegalParameterException("排序 参数不合法");
					}
				}
				return order.substring(1) + DESC;
			}else{
				// 升序
				if(orderAllows != null){
					List<String> list = Arrays.asList(orderAllows);
					if(!list.contains(order)){
						throw new IllegalParameterException("排序 参数不合法");
					}
				}
				return order + ASC;
			}
		}
		
		// 没有指定排序规则
		return null;
		
	}
}
